package jmine.tec.rpc.common.entity;

import java.io.Serializable;
import java.util.List;

import bancosys.tec.persist.dao.BeanNotFoundException;

/**
 * Interface base para serviços REST de acesso à entidades persistidas.
 * 
 * @author lundberg
 * @param <R> entity representation
 */
public interface EntityRest<R extends EntityRepresentation> {

    /**
     * Busca todas as representações da entidade.
     * 
     * @return Lista de representações
     */
    List<R> findAll();

    /**
     * Busca a entidade com a identificação dada.
     * 
     * @param id id
     * @return representation
     * @throws BeanNotFoundException BeanNotFoundException
     */
    R findByIdentification(Serializable id) throws BeanNotFoundException;

    /**
     * Busca a entidade com a chave natural dada.
     * 
     * @param naturalKey naturalKey
     * @return representation
     * @throws BeanNotFoundException BeanNotFoundException
     */
    R findByNaturalKey(Serializable naturalKey) throws BeanNotFoundException;

    /**
     * Busca as entidades com a chave natural similar à dada.
     * 
     * @param naturalKey naturalKey
     * @return representation
     */
    List<R> findByNaturalKeyLike(String naturalKey);

    /**
     * Obtém a classe da representação utilizada
     * 
     * @return class
     */
    Class<R> getRepresentationClass();
}
